;:sys36864 ;.opt oo *= 49152 ; ; 64 keys ; nikolaus m. heusler ; --- ; XXXXXXXXXXXX XX ; 8000 muc 71 ; --- ; (c) 5.90, kommentar 6.92 ; old =$eb48 ;alte tastatur-auswertung ; ; **** beginn hauptprogramm lda #new ;vektor fuer tastatur-auswertung sta 655 sty 656 ;auf neue routine umlenken lda #hi jmp $ab1e ;einschaltmeldung ausgeben ; text einschaltmeldung hi .byte "\x93\x11 *** 64 key v1 c64 (c) nh-030590 ***" .byt 13,13 .byte " von nikolaus heusler ein nss-programm" .byt 13,0 last brk ;letzte gedrueckte taste ; tabelle #1 - codes der steuertasten tab1 .byt 41,62,38,39,18,14,21,55,26,33,42,17,34 .byt 37,13,22,30,31,20,10,36,9,57,12,25,23,28,29,53 .byt 1,51,49,46,43,40,54,48,47,44,2,7,0,45,50 .byt 4,5,6,3,-1 ; tabelle #2 - zeiger auf befehlswoerter tab2 .byt 23,66,31,2,6,0,1,25,33,5,72,73,9,13 .byt 68,35,55,69,71,70,74,18,3,30,12,7,41,16,27,14 .byt 28,15,32,34,10,26,21,39,41,20,19,11,59,56 .byt 53,54,52,67 ; **** neue routine zur tastatur-auswertung ; diese neue routine wird vom system bei ; jedem interrupt automatisch ausgefuehrt new lda 212 ;quote modus testen beq evtl ;wenn nicht aktiv, ok nix lda #64 sta last ;keine taste jmp old ;und abbruch ; abbruch, wenn insert-modus oder (ctrl) nicht gedrueckt evtl lda $d8 bne nix lda 203 cmp last beq foul lda 653 and #4 beq nix lda 203 cmp 197 beq nix ;(ctrl) wurde schon vorher gedrueckt ldy #-1 loop1 iny lda tab1,y ;tastencodes lesen bmi nix ;abbruch bei tabellenende cmp 203 ;mit gedrueckter taste vergleichen bne loop1 ;falsch, dann weiter ldx tab2,y ;zugehoeriges befehlswort laden ldy #-1 ;mit erstem zeichen beginnen txa beq loop3 ;befehlswort gefunden loop2 iny lda $a09e,y bpl loop2 dex bne loop2 ;befehlswort suchen loop3 iny lda $a09e,y bmi loop4 sta 631,x inx bne loop3 ;naechstes token ; befehlswort-text in tastaturpuffer kopieren loop4 and #127 ;bit 7 loeschen sta 631,x ;in tastenpuffer schreiben inx ;naechstes byte lesen stx 198 ;anz. gedrueckter tasten lda 203 sta last foul lda #64 sta 203 ;sonst keine taste gedrueckt sta 197 ;altes muster loeschen jmp old ;weiter in systemroutine